MEGA2560 + SIM900A - constantly blinkg, gprs connection problem

Hello,
recently I got new Arduino Mega 2560 and GSM/GPRS module - SIM900A v3.8.2 (there is the same - http://www.ebay.com/itm/MINI-V3-8-2-Wireless-Data-Transmission-Extension-Module-GSM-GPRS-SIM900A-/311402424851).
I live in Europe, so I flashed european firmware for SIM900 and it was working OK (sending sms, receive calls, sending http requests with gprs) on my PC using Putty serial port terminal. After few tests, I run default sketches from MarcoMartines GSMSHIELD library (other libraries weren't working for me) with Arduino Mega 2560 and they were running ok. After that I decided to make my own sketch. Here you go:

#include "SIM900.h"
#include "inetGSM.h"
#include "sms.h"
#include "call.h"

char NumberCalling[20];
char CorrectNumber[20] = {"5", "0", rest of my number here..... };

void InstantSendSms()
{
  Serial.print(F("SMS: Preparing a text message to be sent to: "));
  Serial.println(CorrectNumber);

  char Message[155];
  sprintf(Message, "Hello from Arduino :)");
  
  Serial.print(F("Message to be sent : "));
  Serial.println(Message);
  sms.SendSMS(CorrectNumber, Message);
  delay(50);
  Serial.println(F("SMS: Message has been sent."));
}

void InstantSendHttp()
{  

  char Address[155];
  sprintf(Address, "test.php?text=test-message");

    Serial.println(F("GPRS: Opening a new Internet connection..."));

    if (inet.attachGPRS("internet", "", ""))
      Serial.println(F("GPRS: Attached!"));
    else 
      Serial.println(F("GPRS: NOT attached! Error."));
    delay(1000);
    
    //Read IP address.
    gsm.SimpleWriteln("AT+CIFSR");
    delay(5000);
    //Read until serial buffer is empty.
    gsm.WhileSimpleRead();

    Serial.print(F("GET request : "));
    Serial.println(Address);
    
    char ReturnedMsg[50];
    int NumberRetMsg;
    NumberRetMsg = inet.httpGET("myserver.com", 80, Address, ReturnedMsg, 50);
    //Print the results.
    Serial.println(F("GPRS: Number of data received:"));
    Serial.println(NumberRetMsg);  
    Serial.println(F("GPRS: Data received:")); 
    Serial.println(ReturnedMsg); 

    inet.dettachGPRS();
    
    Serial.println(F("GPRS: Query has been sent."));


  delay(2000);  // time to finish
}

void setup()
{
  Serial.begin(9600); // Serial connection via USB for debugging purposes
  Serial.println(F("*** Device is starting... ***"));
  delay(50);
  Serial.println(F("* Setting up the GSM Module... *"));
  // connection state
  boolean Connected = false;
  // establish network connection...
  while (!Connected)
  {
    if (gsm.begin(9600))
    {
      Serial.println(F("** GSM : GSM connection established. Ready. **"));
      Connected = true;
    }
    else 
    {
      Serial.println(F("** GSM : Failed to connect to the GSM network. **"));
    }
  }
  delay(50);
  Serial.println(F("*** Setup complete! All systems are ON ***"));
}

void loop()
{
  Serial.println(F("GSM: Checking voice call status..."));
  switch(call.CallStatusWithAuth(NumberCalling, 0, 0))
  {
    case CALL_INCOM_VOICE_AUTH: // Yes! Someone is calling us
      Serial.print(F("GSM: Receiving call... Caller ID: "));
      Serial.println(NumberCalling);
      if(strcmp(NumberCalling, CorrectNumber) == 0)
      {
        Serial.println(F("GSM: Number IS matching whitelist!"));
        delay(1800);  // Wait 1,8 seconds before hang up
        call.HangUp(); // Hang up on me
        InstantSendSms();
        InstantSendHttp();
      }
      else
      {
        Serial.println(F("GSM: Caller is unknown."));
        call.HangUp();
      }
      break;
    case CALL_NONE:
      Serial.println(F("GSM: No one is callin us right now."));
      break;
    default:
      Serial.println(F("GSM: Talking or not responding..."));
      break;
  }
  delay(10);
}

At the first time I used 9600 baud rate for GSM in the sketch. It successfully sent sms, but no luck with GPRS, in Serial Monitor I got always my error message: "GPRS: NOT attached! Error.". I read on the Internet that the baud rate is very important here. Somewhere on this forum I got the information that I should change baud rates in HWSerial.cpp and GSM.cpp in the library files to 4800 bauds. Well, I tried different bauds in my sketch. Finally I got this working with this configuration: in my sketch - 19200 bauds, in library - 4800 bauds. I run Arduino, sms was sent ok, gprs said "GPRS: Attached!" but no data came to my website. Then suddenly SIM900 module stopped working it is weirdly blinking. Power LED is brightening and darkening, and never goes off, and Status LED is quickly blinking. You can see that on video:

I connected it directly to PC, putty was receiving crazy input from SIM900 as you can see below:

I thought that maybe firmware broke up and I flashed again new firmware, it went smoothly and ok, but than again, module is acting the same as strange way as before.

What can I do to get it normally working??

Thanks!!

PS Wow, that's really long post, thanks for your time and helping me out!

Hello. Today I tried again to work with my module. I communicated with sim900 using Download AT Command Tester | M2MSupport.net , things are getting better, SIM900 is responding to AT commands. Module still doesn't work as it is supposed to - PowerLed is ON, StatusLed is indicating connecting to the network. It seems to be connected for about a second and then SIM900 is self-resetting and doing that over and over.
How to fix that?

PS
I don't think power supply is guilty there - it's 5V 2A.

This Mini SIM900A v3.8.2 Module has some design failure. this module use one diode to reduce the 5V supply voltage to Sim900A 4.2V(max) voltage. when the module try to network registration voltage has fallen due to the inrush current. so try to provide needed sim900 supply voltage bypassing the diode.

randika@lk.aptinex.com:
This Mini SIM900A v3.8.2 Module has some design failure. this module use one diode to reduce the 5V supply voltage to Sim900A 4.2V(max) voltage. when the module try to network registration voltage has fallen due to the inrush current. so try to provide needed sim900 supply voltage bypassing the diode.

Can you elaborate the answer please?